'''
10.3.1 time库
'''
'''
1. time()函数
    time()函数返回以浮点数表示的从世界标准时间的1970年1月1日00:00:00开始到现在的总秒数,也就是时间戳
'''
# 使用time()函数获取当前时间的时间戳,示例代码如下:
import time
print(time.time())

'''
2. localtime()与gmtime()函数
    以时间戳形式表示的时间是一个浮点数,按此方式去理解时间对人类而言太过抽象.为此Python提供了可获取结构化时间的localtime()函数和gmtime()函数.
语法格式如下:
localtime(secs)
gmtime(secs)
    以上格式中的secs参数是一个表示时间戳的浮点数,若不提供该参数,默认以time()函数获取的时间戳作为参数
'''
print(time.localtime())
print(time.localtime(50))
print(time.gmtime())
print(time.gmtime(50))
print('=====分割线=====')

# 运行结果如下:
# time.struct_time(tm_year=2025, tm_mon=6, tm_mday=26, tm_hour=9, tm_min=31, tm_sec=13, tm_wday=3, tm_yday=177, tm_isdst=0)
# time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=50, tm_wday=3, tm_yday=1, tm_isdst=0)
# time.struct_time(tm_year=2025, tm_mon=6, tm_mday=26, tm_hour=1, tm_min=31, tm_sec=13, tm_wday=3, tm_yday=177, tm_isdst=0)
# time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=50, tm_wday=3, tm_yday=1, tm_isdst=0)

# 以上代码的输出结果为表示时间的结构化元组
'''
6.sleep()函数
    sleep()函数可以让调用该函数的程序进入睡眠状态,即让其暂时挂起,等待一定时间后再继续执行,sleep()函数接收一个以s为单位的浮点数作为参数,
使用该参数控制进程或线程挂起的时长.
 '''

'''
10.3.2 random库
'''
'''
    random是Python内置的标准库,在程序中导入该库,可利用库中的函数生成随机数据
'''
# random库中常用函数:
# random()          用于生成一个随机浮点数n,0<=n<=1.0
# uniform(a,b)      用于生成一个指定范围内的随机浮点数
# randint(a,b)      用于生成一个指定范围内的整数
# randerange([start,]stop[,step]}       生成一个按指定基数递增的序列,再从该序列中获取一个随机数
# choice(sequence)  从序列中获取一个随机元素,参数sequence表示一个有序类型
# shuffle(x[,random])   将序列X中的元素随机排列
# sample(sequence,k)    从指定序列中获取长度为k的片段,随机排列后返回新的序列,该函数可以给予不可变序列进行操作

import random
print(random.random())  # 生成[0.0,1.0]范围内的随机浮点数
print(random.uniform(3,5))  # 生成[3.0,5.0]范围内的随机浮点数
print(random.randint(2,8))  # 生成[2,8]范围内的随机整数
print(random.randrange(10))  # 生成[0,10)范围内的随机整数
print(random.randrange(1,10,2)) # 随机返回[1,3,5,7,9]内的一个元素
# 随机返回序列中的一个元素
print(random.choice(['python','c','php','java']))
ls = ['python','c','php','java']
random.shuffle(ls)      # 将序列ls中的元素随机排列
print(ls)
# 从序列中获取长度为3的片段,随机排序后返回新的序列
print(random.sample(('python','c','php','java'),k=3))
print('=====分割线=====')

'''
10.3.3 turtle库
    turtle是Python内置的一个标准模块,(库),它提供了绘制线,圆和其他形状的函数,使用该模块可以创建图形窗口,在图形窗口中通过简单重复动作直观地绘制
界面和图形.turtle模块的逻辑非常简单,利用该模块内置的函数,用户可以像使用笔在纸上绘图一样在turtle画布上绘制图形.turtle的使用主要分为创建窗口,
设置画笔和绘制图形(移动画笔)3个方面
'''

# 1. 创建窗口
# 图形窗口也称为画布,(canvas).控制台无法绘制图形,使用turtle模块绘制图形化界面需要先使用setup()函数创建图形窗口,该函数的语法格式如下:
# setup(width,height,startx=None,starty=None)
# setup()函数中的4个参数一次表示窗口宽度,高度,窗口在计算机屏幕上的横坐标和纵坐标,参数width和height的值为整数时表示以像素为单位的尺寸,
# 值为小数时表示图形窗口的宽或高于屏幕的比例.参数startx,starty的取值可以为整数或None(默认值),当取值为整数时,分别表示图形窗口左侧,顶部与
# 屏幕左侧,顶部的距离(单位为像素);当取值为None时,窗口位于屏幕中心
# 使用turtle模块实现图形化程序时,setup()函数不是必须的,如果程序中未调用setup()函数,程序执行时会生成一个默认窗口
# 需要注意的是,使用turtle库在程序中绘制图形后应调用turtle库的done()函数声明绘制结束,此时turtle的主循环会终止,但直到用户手动关闭图形窗口时
# 图形窗口才会退出

# 2. 设置画笔

# (1) 画笔属性函数
# pensize(<width>)   设置画笔尺寸
# speed(speed)    设置画笔移动速度
# color(color)     设置画笔颜色
# pensize()函数的参数width可以设置画笔绘制出的线条的宽度,若参数为空,则pensize()函数返回画笔当前的尺寸.width()函数是pensize()函数的别名
# 它们具有相同的功能
# speed()函数的参数speed用于设置画笔移动的速度,取值范围为[0,10]范围内的整数,数字越大,速度越快
# color()用于设置画笔的颜色
# red orange yellow green
# RGB 颜色,又分为RGB整数值和RGB小数值
# 十六进制颜色
# 参数color的3中表示方式中,字符串,十六进制表示的颜色可以直接使用:
# turtle.color('pink')
# turtle.color('#A22A2A')
# 在使用RGB颜色之前,需先试用colormode()函数设置颜色模式,具体示例如下
# turtle.colormode(1.0)
# turtle.color(1,1,0)
# turtle.colormode(255)
# turtle.color(165,42,42)

# (2) 画笔状态与相关函数
# turtle中的画笔分为UP和DOWN 2种状态,只有画笔为DOWN状态时,移动画笔,画布上才会留下痕迹.turtle中的画笔默认为DOWN状态
# turtle.penup()     提起画笔别名pu()
# turtle.pendown()   放下画笔别名pd()

# 3. 绘制图形

# (1) 移动和控制
# forward(distance)
# backward(distance)
# goto(x,y=None)

# (2) 角度控制
# right(degree)
# left(degree)
# seth(angle)
# angle以x 轴正向为0°,以逆时针方向为正,角度从0逐渐增大;以顺时针方向为负,角度从0逐渐减小

# (3) 图形绘制
# turtle模块中提供了circle()函数,使用该函数可以绘制以当前坐标为圆心,以指定像素值为半径的圆或弧

# circle(radius,extend=None,steps=None)
# radius用于设置半径,extend用于设置弧的角度,取值可正可负 ,steps可用于绘制正多边形

# (4) 图形填充
import turtle
turtle.fillcolor('red')
turtle.begin_fill()
turtle.circle(50,steps=3)
turtle.end_fill()
turtle.penup()
turtle.dot(10, 'black')
turtle.goto(0,50)
turtle.done()
